<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 要实现一个可以使用 for...of 遍历的对象，你需要使该对象符合 JavaScript 的迭代协议。
	// 这意味着对象必须有一个 [Symbol.iterator] 方法，该方法返回一个迭代器。
	// 迭代器需要实现 next 方法，该方法返回一个对象，包含两个属性：value（当前值）和 done（布尔值，表示是否遍历结束）。
	<!--
      可迭代对象类，用于将普通数组转换为可迭代对象。
      实现迭代器协议，允许实例在 for...of 循环等场景中使用。
    -->
	class iteratorObj {
		<!--
          构造函数，初始化可迭代对象
          @param {Array} data - 需要转换为可迭代对象的原始数组
        -->
		constructor(data) {
			this.elements = data
		}

		<!--
          实现迭代器生成方法
          @returns {Object} 迭代器对象，包含 next 方法
        -->
		[Symbol.iterator](){
			let index = 0
			const elements = this.elements

			// 返回符合迭代器协议的对象
			return {
				<!--
                  迭代器核心方法，每次调用返回下一个元素
                  @returns {Object} 包含 value 和 done 属性的迭代结果对象
                -->
				next(){
					// 遍历完成后返回结束标识
					if (index >= elements.length){
						return {done: true}
					}
					// 返回当前元素并移动指针
					else {
						const obj = {value: elements[index], done: false}
						index++
						return obj
					}
				}
			}
		}
	}

	let obj = new iteratorObj([1,2,3,4,5])
	for(let i of obj){
		console.log(i)
	}
</script>
</html>